package com.kexun;

import java.text.Collator;
import java.util.Locale;
import java.util.TreeSet;

public class Student2 implements Comparable<Student2>{


    private int age;
    private String name;
    private String address;



    public Student2(){};

    public Student2(int age, String name, String address) {
        this.age = age;
        this.name = name;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }



    @Override
    public String toString() {
        return "Student2{" +
                "name='" + name + '\'' +
                ", age=" + age +
                ", address='" + address + '\'' +
                '}';
    }





    @Override
    public int compareTo(Student2 o) {

        int i=this.getAge()-o.getAge();   //比较年龄
        if(i==0){

            //获取中文比较对象
            Collator collator=Collator.getInstance(Locale.CHINA);

            int a=collator.compare(this.getName(),o.getName());  //年龄相同比较姓名 字典顺序

            if(a==0){
                return collator.compare(this.getAddress(),o.getAddress());   //年龄 姓名相同  比较地址
            }
            return a;
        }
        return i;
    }



    public static void main(String[] args) {
        Student2 s1=new Student2(10,"小白","上海");
        Student2 s2=new Student2(11,"黑","北京");
        Student2 s3=new Student2(10,"阿黄","安徽");
        Student2 s4=new Student2(13,"小亮","江苏");
        Student2 s5=new Student2(13,"小亮","安徽");

/*    TreeSet对元素进行排序的方式一：   
          让元素自身具备比较功能，元素就需要实现Comparable接口，覆盖compareTo方法。
      TreeSet对元素进行第二种排序方式：
          让集合自身具备比较功能，定义一个类实现Comparator接口，覆盖compare方法。
          将该类对象作为参数传递给TreeSet集合的构造函数。

TreeSet是可以对字符串进行排序的， 因为字符串已经实现了Comparable接口
————————————————
版权声明：本文为CSDN博主「早起的年轻人」的原创文章，遵循CC 4.0 BY-SA版权协议，转载请附上原文出处链接及本声明。
原文链接：https://blog.csdn.net/zl18603543572/article/details/46558809*/

        //Set集合 自定义排序规则
        TreeSet<Student2> s = new TreeSet<>();
          s.add(s1);
          s.add(s2);
          s.add(s3);
          s.add(s4);
          s.add(s5);
        for (Student2 stu : s) {
            System.out.println(stu);
        }
    }
}
/*treeSet 的底层实现 TreeMap 的实现就是红黑树数据结构,
* 红黑树比平衡二叉树  增删效率高 因为红黑树 不用左旋 右旋
* 平衡二叉树  查找块 */